package cn.dyp.com.agriculture.request;

/**
 * 协议请求基类
 * Created by lenovo on 2017/5/7.
 */

public abstract class BaseRequest {
    //把请求结果分组到一个枚举类型里
    public enum RequestResult {
        RESULT_FAIL, RESULT_SUCCESS, RESULT_NO_NET;
    }

    //回调接口，对象的传递（interface用来声明接口，只提供一些方法规约，不提供方法主体）
    public interface OnResponseEventListener {
        void onResponse(BaseRequest request, RequestResult result);//BaseRequest请求对象，RequestResult请求结果
    }

    // 请求结果的回调函数，监听接口
    private OnResponseEventListener responseEventListener;

    /**
     * 设置监听器
     * responseEventListener 监听接口
     */
    public void setOnResponseEventListener(OnResponseEventListener responseEventListener) {
        this.responseEventListener = responseEventListener;
    }

    //获取请求body
    public String getBody() {
        return onGetJasonBody();
    }
    //获取Action名称
    protected abstract String getActionName();

    // 存放服务器端的回应报文
    private String responseStr;

    public BaseRequest() {
    }

    //执行解析方法和请求结果的传递
    public void parseResult(RequestResult result) {
        // 调用方法解析数据
        if (responseStr != null) {
            onJasonParese(responseStr);
        }
        // 将请求结果通知给调用者
        if (responseEventListener != null) {
            responseEventListener.onResponse(this, result);
        }
    }

    /**
     * 设置服务器返回的数据
     * @param responseStr 服务器返回的数据
     */
    public void setResponseStr(String responseStr) {
        this.responseStr = responseStr;
    }

    /**
     * 获取向服务器发送的数据
     * @return 发送数据
     */
    protected String onGetJasonBody(){
        return null;
    }

    /**
     * 解析服务器返回数据
     */
    protected void onJasonParese(String responseStr) {
    }

}
